(function($) {

    var userAgent = window.navigator.userAgent.toLowerCase();
    /**
     * 检测是否为微信浏览器
     */
    function isWeiXin() {
        if(userAgent.match(/MicroMessenger/i) == 'micromessenger') { 
            return true; 
        } else { 
            return false; 
        } 
    }
    /*
    if( $('.bar-top').length > 0 && isWeiXin() ) {
        $('.bar-top').remove();
    }
    */
   
    /**
     * 检测是否为IOS客户端
     */
    function isApp() {
        ios = /iphone|ipod|ipad/.test( userAgent );
        return ios;
    }
    /*
    if( $('.bar-footer').length > 0 && isApp() ) {
        $('.bar-footer').remove();
    }
    */
    /**
     * 禁止APP过度滑动，显示出灰色区域 
     * 只适用IOS
     * @触发CLASS: { .js-no-move }
     */
    $('.bar').on('touchmove', function(e){ e.preventDefault(); });
    $('.js-no-move').on('touchmove', function(e){ e.preventDefault(); });

    /**
     * 关闭手机浏览器300ms点击延迟
     */
    FastClick.attach(document.body);

    /**
     * 触摸效果
     * @触发CLASS: { .js-touch }
     */
    $('body').on('touchstart touchend', '.js-touch', function(event) {
        $(this).toggleClass('is-touching');
    });

    /**
     * 主内容区域滑动
     */
    /*
    window.mainScroll = new IScroll('.site-content', {
        scrollbars: 'custom',
        fadeScrollbars: true,
        shrinkScrollbars: 'scale',
        mouseWheelSpeed: 10,
        deceleration: 0.003,
        mouseWheel: true
        // bounceEasing: 'elastic',
        // bindToWrapper: true 滚动区域
    });
    */
   
})(Zepto);

/**
 * 手机号验证
 */
var checkMobile = function(phoneNum) {
    if( /^(1[0-9][0-9]|14[0-9]|15[0-9]|18[0-9])\d{8}$/i.test(phoneNum) ){ 
        return true;
    } else {
        return false;
    }
};

/**
 * 邮箱验证
 */
var checkEmail = function(email) {
    var reg = /\w+[@]{1}\w+[.]\w+/;
    if(reg.test(email)) {
        return true;
    } else {
        return false;
    }
};

/*
|--------------------------------------------------------------------------
| 发布话题模块
|--------------------------------------------------------------------------
|
| s, settings 配置项
| 
| @func fire 初始化函数
| @func bindUIActions 绑定UI交互事件
| @func submitForm 提交表单
*/
var TopicForm = (function($) {
	var s,
	settings = {
		form: $('.js-topicForm'),
		fields: $('.js-topicForm .js-required'),
		submitBtn: $('.js-submitBtn')
	};

	/**
	 * 初始化模块
	 */
	var fire = function() {
		s = settings;
		_bindUIActions();
		console.log('TopicForm Module Fire!');
	};

	/**
	 * 初始化绑定事件
	 */
	var _bindUIActions = function() {
		// 提交表单
		s.submitBtn.on('click', function(event) {
			event.preventDefault();
			_submitForm();
		});
	};

	/**
	 * 提交表单
	 */
	var _submitForm = function() {

		// 验证表单
		if( _validateForm() ) {
			s.form.submit();
		}

	};

	/**
	 * 验证表单
	 * @return Bool true/false
	 */
	var _validateForm = function() {
		var flag = 0;

		s.fields.each(function(index, el) {
			if( $(el).val() == '' ) {
				flag = 1;
			}	
		});

		if( flag ) {
			alert('你填写的信息不完整，请重新填写！');
			return false;
		} else {
			return true;
		}
	};

	return {
		fire: fire
	}
})(Zepto);

var PlanForm = (function($) {
	var s,
	settings = {
		selectEl: $('.select-plan'),
		choices: $('.select-plan .js-select-plan'),
		selected: '',
		closeBtn: $('.select-plan .js-close'),
		form: $('#selectPlan_form'),
		toggleBtn: $('.js-plan-show'),
		submitBtn: $('.select-plan .js-plan-submit'),
		input: $('.select-plan #selected_plan')
	};
	
	/**
	 * 初始化模块
	 */
	var fire = function() {
		s = settings;
		_bindUIActions();
		_wxShare();
	};

	/**
	 * 初始化绑定事件
	 */
	var _bindUIActions = function() {

		// 选择计划
		s.choices.on('click', function(event) {
			event.preventDefault();
			$(this).siblings().removeClass('is-active');
			$(this).addClass('is-active');
			s.selected = $(this).data('plan');
			s.input.val($(this).data('plan'));
		});

		// 提交表单
		s.submitBtn.on('click', function(event) {
			event.preventDefault();
			/* Act on the event */
			s.form.submit();
		});

		// 显示表单
		s.toggleBtn.on('click', function(event) {
			event.preventDefault();
			/* Act on the event */
			s.selectEl.toggleClass('is-active');
		});

		// 关闭菜单
		s.closeBtn.on('click', function(event) {
			event.preventDefault();
			s.selectEl.removeClass('is-active');
		});
	};

	var _wxShare = function() {
		$.ajax({
			url: '/weixin/ajax/getWeixinSign.ajax',
			type: 'POST',
			dataType: 'json',
			data: {url: location.href},
			success: function(respond) {
				console.log(respond);
				wx.config({
					debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来，若要查看传入的参数，可以在pc端打开，参数信息会通过log打出，仅在pc端时才会打印。
					appId: respond.appId, // 必填，公众号的唯一标识
					timestamp: respond.timestamp, // 必填，生成签名的时间戳
					nonceStr: respond.nonceStr, // 必填，生成签名的随机串
					signature: respond.signature,// 必填，签名，见附录1
					jsApiList: ['onMenuShareTimeline', 'onMenuShareAppMessage', 'onMenuShareQQ', 'onMenuShareWeibo', 'onMenuShareQZone'] // 必填，需要使用的JS接口列表，所有JS接口列表见附录2
				});
			}
		});
	};

	return {
		fire: fire
	}
})(Zepto);

var CertificationForm = (function($) {
	var s,
	settings = {
		wizard_form : $('.js-wizard'),
		step1 : $('#step1'),
		step2 : $('#step2'),
		step3 : $('#step3'),
		next : $('.js-next-step'),
		stepBtn : $('.js-goto'),
		uploadBtn : $('.js-photo-upload'),
		imgInput: $('.js-photo-input'),
		imgPreview: $('.js-photo-preview'),
		current : 1,
		isLoading: false
	};

	/**
	 * 初始化模块
	 */
	var fire = function() {
		s = settings;
		_wxConfig();
		_bindUIActions();
		console.log('CertificationForm Module Fire!');
	};

	/**
	 * 绑定UI交互事件
	 */
	var _bindUIActions = function() {
		s.next.on('click', function(event) {
			event.preventDefault();
			_gotoStep(s.current + 1);
		});

		s.stepBtn.on('click', function(event) {
			event.preventDefault();
			_gotoStep($(this).data('step'));
		});

		s.uploadBtn.on('click', function(event) {
			event.preventDefault();
			_wxUpload();
		});
	};

	/**
	 * 跳转步骤
	 */
	var _gotoStep = function(index) {
		if(index > 3 || index < 1) {
			return;
		}

		if(index > s.current) {
			if(index == 2 && !_validateFormStep(1)) {
				return;
			}
			if(index == 3 && !_validateFormStep(2)) {
				return;
			}
			if(index == 3 && s.current != 3 && _validateFormStep(2)) {
				_submitForm();
				return;
			}
		}
		if(s.current == 3) {
			return;
		}
		s.current += 1;
		$('#step' + index).addClass('is-active');
		$('#step' + index).siblings().removeClass('is-active');
		$('.wizard-progress > div').removeClass('is-active');
		$('.wizard-progress > div:nth-child(-n+' + index + ')').addClass('is-active');
		// window.mainScroll.refresh();
	};

	/**
	 * 提交表单
	 */
	var _submitForm = function() {
		swal({
			title: "确认提交",
			text: "提交后您的信息将无法修改。如果审核未通过，可以修改后再次提交。",
			showCancelButton: true,
			confirmButtonColor: "#00aaee",
			confirmButtonText: "提交审核",
			cancelButtonText: "修改",
			closeOnConfirm: false
		}, function() {
			s.wizard_form.submit();
		});
	};

	/**
	 * 验证表单分步
	 */
	var _validateFormStep = function(step) {

		var $fields = $('#step' + step + ' .js-required'),
			flag = 0;

		$fields.each(function(index, el) {
			if($(this).val() == '') {
				flag = 1;
			}
		});

		if(flag) {
			alert('你的信息填写不完整，请重新检查！');
			return false;
		}

		// 检查手机号
		var phoneNum = $('#step' + step + ' .js-phone').val();
		if( checkMobile(phoneNum) == false && phoneNum !== undefined ) {
			alert('手机号不正确，请重新输入！');
			return false;
		}

		// 检查Email
		var email = $('#step' + step + ' .js-email').val();
		if( checkEmail(email) == false && email !== undefined ) {
			alert('Email输入不正确，请重新输入！');
			return false;
		}

		return true;
	};

	/**
	 * 微信基础配置
	 */
	var _wxConfig = function() {
		$.ajax({
			url: '/weixin/ajax/getWeixinSign.ajax',
			type: 'POST',
			dataType: 'json',
			data: {url: location.href},
			success: function(respond) {
				wx.config({
					debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来，若要查看传入的参数，可以在pc端打开，参数信息会通过log打出，仅在pc端时才会打印。
					appId: respond.appId, // 必填，公众号的唯一标识
					timestamp: respond.timestamp, // 必填，生成签名的时间戳
					nonceStr: respond.nonceStr, // 必填，生成签名的随机串
					signature: respond.signature,// 必填，签名，见附录1
					jsApiList: ['chooseImage', 'uploadImage'] // 必填，需要使用的JS接口列表，所有JS接口列表见附录2
				});
				s.isLoading = false;
			}
		});
	};

	/**
	 * 微信图片上传
	 * 
	 */
	var _wxUpload = function() {
		wx.chooseImage({
			count: 1, // 默认9
			sizeType: ['compressed'], // 可以指定是原图还是压缩图，默认二者都有
			sourceType: ['album', 'camera'], // 可以指定来源是相册还是相机，默认二者都有
			success: function (res) {
				var localIds = res.localIds; // 返回选定照片的本地ID列表，localId可以作为img标签的src属性显示图片
				s.imgPreview.attr('src', localIds[0]);
				s.imgPreview.show();
				wx.uploadImage({
					localId: localIds[0], // 需要上传的图片的本地ID，由chooseImage接口获得
					isShowProgressTips: 1, // 默认为1，显示进度提示
					success: function (res) {
						var serverId = res.serverId; // 返回图片的服务器端ID
						s.imgInput.val(serverId);
					}
				});
			}
		});
	};

	return {
		fire: fire
	}
})(Zepto);

var BindForm = (function($) {
	var s,
	settings = {
		phoneInput: $('.js-phone'),
		sendBtn: $('.js-send'),
		submitBtn: $('.js-submit'),
		form: $('.js-bindForm'),
		fields: $('.js-bindForm .js-required'),
		isSending: false
	};
	
	/**
	 * 初始化模块
	 */
	var fire = function() {
		s = settings;
		_bindUIActions();
	};
	
	/**
	 * 绑定UI事件
	 */
	var _bindUIActions = function() {

		// 提交表单
		s.submitBtn.on('click', function(event) {
			event.preventDefault();
			_submitForm();
		});

		// 发送验证码
		s.sendBtn.on('click', function(event) {
			event.preventDefault();
			if( s.isSending ) return;
			_sendCode();
		});

	}

	/**
	 * 发送验证码
	 */
	var _sendCode = function() {
		if(!checkMobile(s.phoneInput.val())) {
			s.isSending = false;
			alert('手机号码格式不正确！请重新填写');
			return;
		}

		s.isSending = true;
		s.sendBtn.attr('disabled', 'disabled');
		_countDown(60);

		$.ajax({
			url: 'http://service.youthfilmic.com/service/phone/sendForCode',
			type: 'POST',
			dataType: 'json',
			data: {phone: s.phoneInput.val()},
			success: function(res) {
				console.log(res);
				if(res.status == 0) {
					// 发送成功
				}
			},
			error: function() {

			}
		});
	}

	/**
	 * 倒计时
	 */
	var _countDown = function(t) {
		if( t == 0 ) {
			s.sendBtn.text('发送验证码');
			s.sendBtn.removeAttr('disabled');
			s.isSending = false;
		} else {
			s.isSending = true;
			t --;
			s.sendBtn.text(t + 's');
			setTimeout(function() {
				_countDown(t);
			}, 1000);
		}
	}

	/**
	 * 提交表单
	 */
	var _submitForm = function() {

		// 验证表单
		if( _validateForm() ) {
			s.form.submit();
		}

	};

	/**
	 * 验证表单
	 * @return Bool true/false
	 */
	var _validateForm = function() {
		var flag = 0;

		if(!checkMobile(s.phoneInput.val())) {
			alert('手机号码格式不正确！请重新填写');
			return false;
		}

		s.fields.each(function(index, el) {
			if( $(el).val() == '' ) {
				flag = 1;
			}	
		});

		if( flag ) {
			alert('你填写的信息有误，请重新填写！');
			return false;
		} else {
			return true;
		}
	};

	return {
		fire: fire
	}
	
})(Zepto);

var StepForm = (function($) {
	var s,
	settings = {
		stepForm: $('.js-step-form'),
		stepSwiper: undefined,
		fields: $('.js-required'),
		submitBtn: $('.js-confirm')
	};
	
	/**
	 * 初始化模块
	 */
	var fire = function() {
		s = settings;
		_bindUIActions();
	};
	
	/**
	 * 绑定UI事件
	 */
	var _bindUIActions = function() {
		/**
         * 分步表单
         */
        s.stepSwiper = new Swiper('.js-step-form', {
            pagination: '.swiper-pagination',
            slidesPerView: 'auto',
            paginationClickable: true,
            slidesOffsetBefore: 15,
            slidesOffsetAfter: 15,
            spaceBetween: 15
        });

        s.submitBtn.on('click', function(event) {
        	event.preventDefault();
        	if( _validateForm() ) {
        		_submitForm();
        	}
        });
	}

	/**
	 * 提交表单
	 */
	var _submitForm = function() {
		swal({
            title: "确认提交",
            text: "您的电影客约见申请将被提交。如果电影咖未通过您申请，可以修改后再次提交。",
            showCancelButton: true,
            confirmButtonColor: "#00aaee",
            confirmButtonText: "提交审核",
            cancelButtonText: "修改",
            closeOnConfirm: false
        }, function() {
            s.stepForm.submit();
        });
	};

	/**
	 * 验证表单分步
	 */
	var _validateForm = function() {

		var $fields = $('.js-step-form .js-required'),
            flag = 0;

        $fields.each(function(index, el) {
            if($(this).val() == '') {
                flag = 1;
            }
        });

        if(flag) {
            alert('你的信息填写不完整，请重新检查！');
            return false;
        }

        // 检查手机号
        var phoneNum = $('.js-step-form .js-phone').val();
        if( checkMobile(phoneNum) == false && phoneNum !== undefined ) {
            alert('手机号不正确，请重新输入！');
            return false;
        }
        
        return true;
	};

	return {
		fire: fire
	}
	
})(Zepto);

var ReviewForm = (function($) {
	var s,
	settings = {
		showBtn: $('.js-form-modal-show'),
		modal: $('.js-form-modal'),
		cancelBtn: $('.js-form-modal .btn-cancel'),
		submitBtn: $('.js-form-modal .btn-submit'),
		fields: $('.js-form-modal .js-required'),
		form: $('.js-form-modal .wizard-form')
	};
	
	/**
	 * 初始化模块
	 */
	var fire = function() {
		s = settings;
		_bindUIActions();
	};
	
	/**
	 * 绑定UI事件
	 */
	var _bindUIActions = function() {
		s.submitBtn.on('click', function(event) {
			event.preventDefault();
			var flag = false;
			s.fields.each(function(index, el) {
				if($(this).val() == '') {
					flag = true;
				}
			});
			if(flag) {
				alert('内容不能为空!');
			}
			_submitForm();
		});

		s.cancelBtn.on('click', function(event) {
			event.preventDefault();
			s.modal.removeClass('is-active');
		});

		s.showBtn.on('click', function(event) {
			event.preventDefault();
			s.modal.addClass('is-active');
		});
	}

	var _submitForm = function() {
		s.form.submit();
	}

	return {
		fire: fire
	}
	
})(Zepto);

var WeixinPay = (function($) {
	var s,
	settings = {
		isLoading: true,
		applicationId: $('#applicationId').val(),
		submitBtn: $('.js-pay')
	};
	
	/**
	 * 初始化模块
	 */
	var fire = function() {
		s = settings;
		_wxConfig();
		_bindUIActions();
	};
	
	/**
	 * 绑定UI事件
	 */
	var _bindUIActions = function() {
		var self = this;
		s.submitBtn.on('click', function(event) {
			event.preventDefault();
			_submitPayment();
		});
	}

	var _wxConfig = function() {
		var self = this;
		$.ajax({
			url: '/weixin/ajax/getWeixinSign.ajax',
			type: 'POST',
			dataType: 'json',
			data: {url: location.href},
			success: function(respond) {
				wx.config({
					debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来，若要查看传入的参数，可以在pc端打开，参数信息会通过log打出，仅在pc端时才会打印。
					appId: respond.appId, // 必填，公众号的唯一标识
					timestamp: respond.timestamp, // 必填，生成签名的时间戳
					nonceStr: respond.nonceStr, // 必填，生成签名的随机串
					signature: respond.signature,// 必填，签名，见附录1
					jsApiList: ['chooseWXPay'] // 必填，需要使用的JS接口列表，所有JS接口列表见附录2
				});
				s.isLoading = false;
			}
		});
	}

	var _submitPayment = function() {
		var self = this;

		if( s.isLoading ) {
			return;
		}
		s.isLoading = true;
		
		$.ajax({
			url: '/weixin/pay/getNewOrderInfo.ajax',
			type: 'POST',
			dataType: 'json',
			data: {applicationId: s.applicationId},
			success: function(res) {
				console.log(res);
				wx.chooseWXPay({
					appId: res.appid,
					timestamp: res.timestamp, // 支付签名时间戳，注意微信jssdk中的所有使用timestamp字段均为小写。但最新版的支付后台生成签名使用的timeStamp字段名需大写其中的S字符
					nonceStr: res.nonce_str, // 支付签名随机串，不长于 32 位
					package: 'prepay_id=' + res.prepay_id, // 统一支付接口返回的prepay_id参数值，提交格式如：prepay_id=***）
					signType: 'MD5', // 签名方式，默认为'SHA1'，使用新版支付需传入'MD5'
					paySign: res.sign, // 支付签名
					success: function (res) {
						// 支付成功后的回调函数
						if(res.errMsg == 'chooseWXPay:ok') {
							// 支付成功
							window.location = '/main/pay/competeByQuery?applicationId=' + s.applicationId;

						} else if(res.errMsg == 'chooseWXPay:cancel') {
							// 支付取消
							alert('支付取消');
						} else if(res.errMsg == 'chooseWXPay:fail') {
							// 支付失败
							alert('支付失败');
						}
						s.isLoading = false;
					}
				});
			}
		});
	}

	return {
		fire: fire
	}
	
})(Zepto);

/*
|--------------------------------------------------------------------------
| 全局通用功能
|--------------------------------------------------------------------------
|
| 1.检测是否为微信浏览器
| 2.禁用APP过度滑动
| 3.关闭手机浏览器300ms点击延迟
| 4.增加元素触摸点击效果
| 5.主内容区域滚动效果
*/
(function($) {

    BATMAN = {

        /**
         * 首页
         */
        homePage: function() {

            // 推荐大图轮播
            var featured_slider = new Swiper('.featured-slider-container', {
                loop: true,
                pagination: '.featured-pagination',
                autoplay: 4000,
                paginationClickable: true,
                paginationBulletRender: function (index, className) {
                    return '<div class="' + className + '"></div>';
                }
            });

            // 城市筛选
            $('.js-city-select').on('click', function(event) {
                event.preventDefault();
                var $icon = $(this).find('.filter-icon'),
                    $cities = $('.cities-wrap');
                if($icon.hasClass('is-open')) {
                    $icon.removeClass('is-open');
                    $cities.removeClass('is-open');
                } else {
                    $icon.addClass('is-open');
                    $cities.addClass('is-open');
                }
            });
        },

        /**
         * 发布话题页面
         */
        newTopicPage: function() {
            TopicForm.fire();
        },

        /**
         * 成为电影咖页面
         */
        certificationPage: function() {
            CertificationForm.fire();
        },

        /**
         * 青年电影志详情页面
         */
        yuejianPage: function() {
          PlanForm.fire();  
        },

        /**
         * 预约表单页面
         */
        yuyuePage: function() {
            StepForm.fire();
        },

        /**
         * 微信支付页面
         */
        paymentPage: function() {
            WeixinPay.fire();
        },

        /**
         * 审核青年电影志申请页面
         */
        reviewApplyPage: function() {
            ReviewForm.fire();
        },

        /**
         * 绑定手机号页面
         */
        bindPage: function() {
            BindForm.fire();
        }
    };

    UTIL = {
        fire: function(controller) {

            var namespace = BATMAN;

            if(controller !== '' && namespace[controller]) {
                namespace[controller]();
            }

        },
        init: function() {
            
            var app = $('#app'),
                controller = app.data('controller');

            // 调用代码模块
            UTIL.fire(controller);
        }
    }
    // 页面侦听
    $(document).ready(UTIL.init);
})(Zepto);

